# -*- coding: utf-8 -*-

from datetime import date, timedelta
from djtools.utils import rtr, httprr
from frota.forms import ViagemSaidaForm, ViagemAgendamentoRespostaForm, \
    ViagemChegadaForm, ViaturaOrdemAbastecimentoForm
from frota.models import Viagem, ViagemAgendamento, ViagemAgendamentoResposta
from frota.enums import Situacao

@rtr('frota/templates/form_avaliar_viagem.html')
def avaliar_agendamento_viagem(request, agendamento_id):
    status = Situacao.get_choices()
    agendamento = ViagemAgendamento.objects.get(id=agendamento_id)
    if request.POST:
        form = ViagemAgendamentoRespostaForm(request.POST, agendamento_id=agendamento_id)
        if form.is_valid():
            form.save()
            return httprr('/admin/frota/viagemagendamento/', 'Agendamento avaliado com sucesso.')
    else:
        if agendamento.status == Situacao.PENDENTE:
            form = ViagemAgendamentoRespostaForm(agendamento_id=agendamento.id)
        else:
            agendamentoResposta = ViagemAgendamentoResposta.objects.get(agendamento=agendamento)
    return locals()

@rtr('frota/templates/viagens_agendadas.html')
def viagens_agendadas(request):
    # seleciona todos os agendamentos que já tiveram registros de saída
    agendamentos_viagem = list(Viagem.objects.all().values_list('agendamento_resposta_id', flat=True))
    resp_agendamentos = ViagemAgendamentoResposta.objects\
                                                           .filter(agendamento__status=Situacao.DEFERIDA,
                                                                   agendamento__data_saida__lte=date.today() + timedelta(1))\
                                                           .exclude(id__in=agendamentos_viagem)

    return locals()

@rtr('frota/templates/form_saida_viagem.html')
def saida_viagem(request, resp_agendamento_id):
    resp_agendamento = ViagemAgendamentoResposta.objects.get(id=resp_agendamento_id)
    if request.POST:
        form = ViagemSaidaForm(request.POST, resp_agendamento_id=resp_agendamento_id)
        if form.is_valid():
            form.save()
            return httprr('/frota/viagens_agendadas/', 'Viagem iniciada com sucesso.')
    else:
        form = ViagemSaidaForm(resp_agendamento_id=resp_agendamento.id)
    return locals()

@rtr('frota/templates/viagens_iniciadas.html')
def viagens_iniciadas(request):
    viagens = Viagem.objects.filter(chegada_data=None)
    return locals()

@rtr('frota/templates/form_chegada_viagem.html')
def chegada_viagem(request, viagem_id):
    viagem = Viagem.objects.get(id=viagem_id)
    if request.POST:
        form = ViagemChegadaForm(request.POST, instance=viagem)
        if form.is_valid():
            form.save()
            return httprr('/frota/viagens_iniciadas/', 'Viagem finalizada com sucesso.')
    else:
        form = ViagemChegadaForm()
    return locals()

@rtr('frota/templates/viagens.html')
def viagens(request):
    viagens = Viagem.objects.all().order_by('-saida_data')
    return locals()

@rtr('frota/templates/viagem.html')
def viagem(request, viagem_id):
    viagem = Viagem.objects.get(id=viagem_id)
    return locals()

@rtr('frota/templates/form_ordem_abastecimento.html')
def ordem_abastecimento(request, viagem_id):
    viagem = Viagem.objects.get(id=viagem_id)
    if request.POST:
        form = ViaturaOrdemAbastecimentoForm(request.POST, viagem_id=viagem_id)
        if form.is_valid():
            form.save()
            return httprr('/frota/viagens/', 'Ordem de Abastecimento cadastrada com sucesso.')
    else:
        form = ViaturaOrdemAbastecimentoForm(viagem_id=viagem_id)
    return locals()

@rtr('frota/templates/agendamento.html')
def agendamento(request, agenda_id):
    agendamentoResposta = ViagemAgendamentoResposta.objects.get(id=agenda_id)
    return locals()